//
//  AppDelegate.swift
//  weiboFirst
//
//  Created by ZhouRobert on 15/6/24.
//  Copyright © 2015年 ZhouRobert. All rights reserved.
//

import UIKit
import AFNetworking

/// 全局变量记录用户账号信息，只加载一次用户账号，后续再获取 token，就不再需要去磁盘加载
/// 执行时机，在需要的时候，才会执行，并不是程序一启动就会执行！
/// 放在 @UIApplicationMain 上面
var sharedUserAccount = UserAccount.loadAccount()

//切换根控制器的通知
let IBSwitchRootVCNotification = "IBSwithRootVCNatification"

//@UIApplication 是表示程序的入口，swift中没有main.m
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        //打印归档保存的用户信息
        print(sharedUserAccount)
        
        //设置网络
        setupNetwork()
        
        // 设置外观
        setupAppearance()
        
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        window?.backgroundColor = UIColor.whiteColor()
        window?.rootViewController = defaultViewController()
        
        window?.makeKeyAndVisible()
        
        
        //注册通知，由于是写在delegate中的通知，所以，不用写撤销通知也是可以的
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "switchViewController:", name: IBSwitchRootVCNotification,object:nil)
        //如果要写注销通知的话，可以在下面写deinit
        
        return true
    }
    //注销通知
    deinit {
        
        NSNotificationCenter.defaultCenter().removeObserver(self, name: "IBSwitchRootVCNotification", object: nil)
    }
    
///  切换控制器，最好在APPDelegate中统一操作，不要在外面操作。
    func switchViewController(n: NSNotification) {
        //判断 object是否为true， 如果是，则显示MainViewController
        
        let isMainVC = n.object as! Bool
        
        window?.rootViewController = isMainVC ? MainViewController() : WelcomeViewController()
        
        
    }
    
///  判断加载的默认控制器
    
    private func defaultViewController() -> UIViewController {
        //1. 判断用户是否登录
        
        if sharedUserAccount != nil {
            
            
            return isNewUpdate() ? NewFeatureViewController() : WelcomeViewController()
            
        }
        return MainViewController()
    }
    
    //判断是否有新版本
    private func isNewUpdate() -> Bool {
        //1. 获取应用程序的“当前版本”
        let currentVersion = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
        
       // let version = NSNumberFormatter().numberFromString(currentVersion)!.doubleValue
        //老师的老方法,下面是同学的建议,由string转成了Double
        
        let version = Double(currentVersion)!
        
        
        // 2. 从用户偏好中读取到应用程序“previous version”
        
        let versionKey = "versionKey"
        let sandBoxVersion = NSUserDefaults.standardUserDefaults().doubleForKey(versionKey)
     
        
        //3. 将“当前版本”写入用户偏好
        
        NSUserDefaults.standardUserDefaults().setDouble(version, forKey: versionKey)
        
        //从Xcode 6.0 开始不需要同步了
        //注意：standard和reset 是类方法，synchronize()同步,是对象方法
        
        return version > sandBoxVersion
        
    }
    
    //设置网络
    private func setupNetwork() {
        // 设置网路指示器
        AFNetworkActivityIndicatorManager.sharedManager().enabled = true
        // 设置网络缓存
        let urlCache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
        NSURLCache.setSharedURLCache(urlCache)
        
    }
    
    /// 设置外观
    private func setupAppearance() {
        // 设置外观，一经设置全局有效，必须早，通常会看到 appDelegate 中存在设置外观的代码
        UINavigationBar.appearance().tintColor = UIColor.orangeColor()
        UITabBar.appearance().tintColor = UIColor.orangeColor()
    }
}


